//
//  CXHomeViewController.swift
//  CXSwiftDemo
//
//  Created by 潮汐 on 2023/11/28.
//  Copyright © 2023 小潮汐. All rights reserved.
//

import UIKit

//头文件在：CXSwiftDemo-Bridging-Header.h 里全局导入了

////导入网路请求框架
//import Alamofire
////JSON数据处理
//import SwiftyJSON
////数据转模型
//import KakaJSON
////图片解析
//import Kingfisher
////OC的刷新控件
//import MJRefresh

class CXHomeViewController: CXBaseViewController {
    lazy var tableView: UITableView = UITableView(frame: CGRectZero, style: .grouped)
    lazy var headerView: CXHomeHeaderView = CXHomeHeaderView()//头部
    lazy var dataSouce = [CXHomeListModel]()//数据源-数组
    var page = 0
    

    override func viewDidLoad() {
        super.viewDidLoad()
        //设置导航栏标题
        self.titleNavLabel.text = "首页"
        self.backNavButton.isHidden = true
        //创建头部
        createFeaderViewUI()
        //创建tablevie
        createTbaleview()
        //添加刷新控件
        addRefresh()
        
    }
    
    //创建头部UI
    func createFeaderViewUI(){
        headerView.frame = CGRect(x: 0, y: 0, width: SCREEN_WIDTH, height: 50)
        headerView.backgroundColor = .orange
        tableView.tableHeaderView = headerView
        //头高回调，self弱引用[weak self]
        headerView.getHeaderHeightBlock = {[weak self] (headerHeight: Double, name: String) -> () in
            print("得到头高\(headerHeight)+\(name)")//得到头高200.0+潮汐
        }
        
        headerView.sendValue = {[weak self] in

        }
        //添加数据
        headerView.addDataToUI()
    }
    
    //初始化tableview
    func createTbaleview(){
        tableView.frame = CGRect(x: 0, y: MC_NavHeight, width: SCREEN_WIDTH, height: SCREEN_HEIGHT-MC_NavHeight-MC_TabbarHeight)
        tableView.tablevieiOS11(tableView: tableView)//iOS11、iPhoneX适配
        tableView.delegate = self//设置代理
        tableView.dataSource = self//设置代理
        //tableview拖动时收起键盘
        //tableView.keyboardDismissMode = .onDrag
        //去掉分割线
        //tableView.separatorStyle = .none
        view.addSubview(tableView)
    }
    
    //添加刷新控件
    func addRefresh(){
        let header = MJRefreshNormalHeader(refreshingBlock: self.loadNewData)
        header.beginRefreshing()
        tableView.mj_header = header
        tableView.mj_footer = MJRefreshAutoNormalFooter(refreshingBlock: self.loadMoreData)
    }
    
    //网络加载数据
    func loadNewData(){
        /*
        let parameters = ["page": "1"]
        AF.request(API.imgrank,//接口名
                   method: .post,//请求方式
                   parameters:parameters//请求参数
        ).response { [self] response in
            debugPrint(response)//打印
            switch response.result {
            case .success:
                //成功
                print("Validation Successful")
                let dict = response.result//取出数据
//                let jsons = JSON(dict)["items"].arrayObject
//                let models = modelArray(from: jsons!, Item.self)
//                self.items.removeAll()
//                self.items.append(contentsOf: models)
//
//                self.tableView.reloadData()
//                self.tableView.mj_header?.endRefreshing()
//                self.page = 1
                
            case let .failure(error):
                //失败
                CXLog("网络请求失败")
                self.tableView.mj_header?.endRefreshing()
                print(error)
            }
        }
         
         */
        
        
        
        //读取本地json
        let dataDict = getJsonDictionaryFileWithJsonName(jsonName: "CXListData")
        print("获取到data首页数据：\n\(dataDict)")
        addDataToUI(dictDta: dataDict)
        
        
//        request(API.imgrank,parameters: ["page":1]).responseJSON {[weak self]response in
//            guard let dict = response.result.value else {return}
//
//            let jsons = JSON(dict)["items"].arrayObject
//            let models = modelArray(from: jsons!, Item.self)
//            self?.items.removeAll()
//            self?.items.append(contentsOf: models)
//
//            self?.tableView.reloadData()
//            self?.tableView.mj_header?.endRefreshing()
//            self?.page = 1
//        }
    }
    
    func addDataToUI(dictDta: [String: Any]){
        //取出json数组数据
        let jsonArray = JSON(dictDta)["user"].arrayObject
        ////转化成数组类型-kakaJson
        let models = modelArray(from: jsonArray!, CXHomeListModel.self)
        //清空数组
        self.dataSouce.removeAll()
        //添加模型到数组里
        self.dataSouce.append(contentsOf: models)
        //刷新表格
        self.tableView.reloadData()
        //结束刷
        self.tableView.mj_header?.endRefreshing()
        self.tableView.mj_footer?.endRefreshing()
        //页码重置
        self.page = 1
        
    }
    
    
    func loadMoreData() {
        let parameters = ["page": page+1]
        AF.request(API.imgrank,//接口名
                   method: .post,//请求方式
                   parameters:parameters//请求参数
        ).response { [self] response in
            debugPrint(response)//打印
            switch response.result {
            case .success:
                //成功
                print("Validation Successful")
                let dict = response.result
                let jsons = JSON(dict)["items"].arrayObject
                //清空数组元素
                self.dataSouce.removeAll()
                for i in 0..<jsons!.count {
                    //取出一条数据
                    let dict: [String: Any] = jsons?[i] as! [String : Any]
                    //字典数据转模型
                    let models = dict.kj.model(CXHomeListModel.self)
                    //添加数据
                    self.dataSouce.append(models)
                }
                self.tableView.reloadData()
                self.tableView.mj_header?.endRefreshing()
                self.page += 1
                
            case let .failure(error):
                //失败
                self.tableView.mj_header?.endRefreshing()
                print(error)
            }
        
        }
    }
    
    
    //将要出现
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        //影藏导航栏
        self.navigationController?.setNavigationBarHidden(true, animated: animated)
        
    }
    //已经出现
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
    }
    
    //将要消失
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        
    }
    
    deinit {
        print("控制器销毁了")
    }
    
    //侧换返回和点击返回按钮都会走这里，控制不走dealloc也会走这里。
    override func didMove(toParent parent: UIViewController?) {
        super.didMove(toParent: parent)
        if parent == nil {
            print("页面pop成功了")
            //销毁通知
            NotificationCenter.default.removeObserver(self)
        }
    }

    
}


////扩展：同一个文件中的extension和写在class里边没什么区别
extension CXHomeViewController:UITableViewDataSource, UITableViewDelegate{
    //返回几个cell
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        //是否隐藏上拉加载，如果dataSouce数据个数是0就隐藏
        tableView.mj_footer?.isHidden = dataSouce.count == 0
        //tableview底部上拉加载更多文字的字样
        return dataSouce.count
    }
    
    //每一个cell的高度
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return 100
    }
    
    //设置组头高度
    func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        return 60;
    }
    
    //设置组脚高度
    func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        return 0.01;
    }
    
    //设置下分组头，不然顶部会有黑线
    func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        var headerGroupView = UIView()
        headerGroupView.backgroundColor = .white
        
        //button
        // Do any additional setup after loading the view.
        var button = UIButton(type: .custom)
        button.frame = CGRect(x: (SCREEN_WIDTH-100)/2, y: 10, width: 100, height: 40)
        button.setTitle("功能列表", for: .normal)
        button.setTitleColor(.red, for: .normal)
        button.titleLabel?.font = .systemFont(ofSize: 20)
        button.layer.cornerRadius = 5
        button.layer.borderWidth = 1
        button.layer.borderColor = UIColor.red.cgColor
        button.addTarget(self, action: #selector(actionButton), for: .touchUpInside)
        headerGroupView.addSubview(button)
        
        return headerGroupView
    }
    
    //设置下分组脚，不然底部会有黑线
    func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        let footGroupView = UIView()
        return footGroupView
    }
    
    //设置cell的控件
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        var homeCell = tableView.dequeueReusableCell(withIdentifier: "CXHomeTableViewCell") as? CXHomeTableViewCell //类型转换
        if homeCell == nil {//复用cell-自定义cell
            homeCell = CXHomeTableViewCell(style: .default, reuseIdentifier: "CXHomeTableViewCell")
        }
        //取出一条数据
        let modelCell = dataSouce[indexPath.row]
        //数据传给cell
        homeCell?.addDataToUI(model: modelCell)
        
        return homeCell!
    }
    
    
    //头部button点击
    @objc func actionButton(){
        let VC = CXToolsEntController()
        self.navigationController?.pushViewController(VC, animated: true)
    }
}
